昨天示範透過 docker command 快速啟動 nginx,但是通常docker command只會用於測試使用,原因是如果服務本身只有透過指令建置,缺點會有以下幾項:
docker 用意。所以建議透過 docker-compose.yml 檔案做為版控保留,以下示範 docker-compose.yml 檔案寫法,yml 檔案注重排版對齊,往往會因為多一個空白鍵或者少一個,造成服務無法建置。docker-compose 安裝步驟
docker-compose.yml 之前,先介紹一個管理 docker 的UI工具,執行以下指令在開啟Pontainer 頁面
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /home/rdmb0369/RD/Portainer:/data portainer/portainer

開始介紹該如何使用 docker-compose.yml 建置,下方 yml 檔文件在搭配docker-compose up -d 指令,即可完成 nginx 服務建置,但是目前服務尚未對外,且建議將 container 名稱採用有意義的命名,往後在為運時比較能看懂,故仍需要修正 docker-compose.yml 後才可以讓專案使用。
version: '3' # 目前使用的版本
services: # services 固定字
web: # 可以隨機命名,識別用
image: nginx:1.12.1 # image 容器 + 版本號
每一次調整 docker-compose.yml 後,只需要在重新執行 docker-compose up -d 指令,服務就會重新佈署。
version: '3' # 目前使用的版本
services: # services 固定字
web: # 可以隨機命名,識別用
image: nginx:1.12.1 # image 容器 + 版本號
container_name: nginx-servie # 容器名稱
restart: always # 當機器重新啟動時,服務會自動啟動
ports: # 容器外與容器內的Port
- 8081:80
上述的範例執行完畢後,打開 nginx 頁面 ,即可看見 nginx 畫面,接著會介紹該如何將自己開發的專案,掛載到容器內。
// default.conf
server {
listen 80;
server_name localhost;
location / {
root /home/project;
index index.html index.htm;
}
}
// index.html
<h1>1234</h1>
version: '3' # 目前使用的版本
services: # services 固定字
web: # 可以隨機命名,識別用
image: nginx:1.12.1 # image 容器 + 版本號
container_name: nginx-servie # 容器名稱
restart: always # 當機器重新啟動時,服務會自動啟動
ports: # 容器外與容器內的Port
- 8081:80
volumes: # 將容器外檔案掛載至容器內,如果容器內相同路徑已經存在相同檔案,則會覆蓋內容
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./index.html:/home/project/index.html
上方範例除了覆蓋容器內原本的 default.conf 內容,更掛載新的 index.html 檔案至 /home/project/ 路徑底下。
透過docker-compose.yml可以了解到,每一次的更改都可以推至版控工具(ex:github or gitlab...),需要重新佈署服務時只需要執行 docker-compose up -d 就完成啦~是不是很快呢。